package com.bzkj.document.service.otheroutbound;

import com.bzkj.common.core.domain.AjaxResult;
import com.bzkj.common.core.domain.model.LoginUser;
import com.bzkj.common.core.page.TableDataInfo;
import com.bzkj.common.domain.NccRequestDTO;
import com.bzkj.document.domain.DocConfirmDTO;
import com.bzkj.document.domain.otheroutorder.dto.IcGeneraloutRequestBody;
import com.bzkj.document.domain.otheroutorder.dto.OtherOutQueryDTO;

import java.util.HashMap;
import java.util.List;

/**
 * @projectName: bzkj-wms
 * @package: com.bzkj.document.service.outbound.impl
 * @className: OutboundOrderService
 * @description: 其他出库单服务层接口
 * @author: C1309
 * @createDate: 2024年11月24日
 * @version: v1.0
 */
public interface OtherOutboundOrderService {

    /**
     * 获取ncc其他出库单列表
     *
     * @param nccRequestDTO 请求参数
     * @return 查询结果
     */
    TableDataInfo selectOutboundOrder(NccRequestDTO nccRequestDTO);

    /**
     * WMS确认NCC其他出库单
     *
     * @param docConfirmDTO 确认信息
     * @return 结果
     */
    AjaxResult confirmOutboundOrder(DocConfirmDTO docConfirmDTO);

    /**
     * 对其他出库单进行签字操作
     *
     * @param cgeneralhid    单据头
     * @param loginUser 登录用户信息
     * @return 结果
     */
    AjaxResult signatureOutBound(String cgeneralhid, LoginUser loginUser);

    /**
     * 修改其他出库单
     *
     * @param responseBody 请求参数
     * @param loginUser    登录用户
     * @param isSign       是否跳过校验
     * @return 修改结果
     */
    AjaxResult updateOtherOutBoundOrder(HashMap<String, Object> responseBody, LoginUser loginUser, boolean isSign);

    /**
     * 新增其他出库单
     *
     * @param icGeneraloutRequestBody 其他出库单新增数据
     * @return 新增结果
     */
    AjaxResult addOtherOutboundOrder(IcGeneraloutRequestBody icGeneraloutRequestBody);

    /**
     * 获取本地其他出库单
     *
     * @param otherOutQueryDTO 查询条件
     * @param pageNum          页码
     * @param pageSize         每页大小
     * @return 查询结果
     */
    TableDataInfo getLocalOtherOutboundOrder(OtherOutQueryDTO otherOutQueryDTO, int pageNum, int pageSize);

    /**
     * 其他出库单撤回至未收货状态
     *
     * @param headerId 单据表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult orderBack(String headerId, LoginUser loginUser);

    /**
     * 更新库存
     * @param headerId 单据表头主键
     * @param loginUser 登录用户
     * @return 操作结果
     */
    AjaxResult updateInventory(String headerId, LoginUser loginUser);

    /**
     * 删除其他出库单
     * @param headerId 单据表头主键
     * @param loginUser 登录用户
     * @param reason 作废原因
     * @return 操作结果
     */
    AjaxResult deleteOtherOutBoundOrder(String headerId, LoginUser loginUser, String reason);
}
